#pragma once 

#include "Common.h"
#include "ZobristHashes.h"

#define MAN_VALUE 1000
#define KING_VALUE 2500

#define GAME_WIN 0xFFFF
#define GAME_LOSS (-((int)GAME_WIN))


// initialization
void InitEvaluation();

// evaluation function templates
template<typename TBITBOARD> int Evaluation(SEngineData* ed, TBITBOARD* bb, bool bWhite);
template<> int Evaluation<BitBoard>(SEngineData* ed, BitBoard* bb, bool bWhite);
template<> int Evaluation<BitBoard64>(SEngineData* ed, BitBoard64* bb, bool bWhite);

// evaluation functions
int BasicEvaluation(SEngineData *ed, BitBoard* bb, bool bWhite);
int BasicEvaluation64(SEngineData *ed, BitBoard64* bb, bool bWhite);
//int PositionEvaluation(BitBoard* bb, bool bWhite, ZOBRIST_KEY zkeyBoard);
int GetDBRank(BitBoard bb, bool bWhite);
//int Quiescence(BitBoard* bb, bool bWhite, int alpha, int beta, ZOBRIST_KEY zkeyBoard);

// setting the evaluation function according to the checkers type
void SetCheckersTypeEval(SEngineData* ed, eCheckersType type);

